package cn.xeblog.plugin.game.sudoku.enums;

import com.intellij.openapi.ui.ComboBox;
import java.awt.Dimension;
import java.util.Arrays;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 面板尺寸
 *
 * @author ☆程序员鼓励师☆
 * @date 2022/8/15 14:13
 */
@Getter
@AllArgsConstructor
public enum PanelSize {
  /**
   * 小号面板
   */
  MIN("小号", 280, 350, 270, 270, 13),
  /**
   * 中号面板
   */
  MEDIUM("中号", 410, 410, 400, 400, 18),
  /**
   * 大号面板
   */
  MAX("大号", 510, 530, 500, 500, 23);

  /**
   * 备注
   */
  String memo;
  /**
   * 主面板宽度
   */
  int mainWith;
  /**
   * 主面板高度
   */
  int mainHeight;
  /**
   * 表格宽度
   */
  int tableWidth;
  /**
   * 表格高度
   */
  int tableHeight;
  /**
   * 字体大小
   */
  int fontSize;

  /**
   * 通过备注获取面板尺寸枚举
   *
   * @param name 备注名称
   * @return 面板尺寸枚举
   */
  public static PanelSize getPanelSize(String name) {
    return Arrays.stream(values()).filter(panelSize -> panelSize.memo.equals(name)).findFirst().orElse(PanelSize.MIN);
  }

  /**
   * 获取面板尺寸下拉列表项
   *
   * @param dimension 尺寸
   * @return 面板尺寸下拉列表项
   */
  public ComboBox<String> getComboBox(Dimension dimension) {
    ComboBox<String> comboBox = new ComboBox<>();
    // 设置此组件的首选大小
    comboBox.setPreferredSize(dimension);
    // 面板尺寸下拉列表项添加选项值
    Arrays.stream(PanelSize.values()).map(PanelSize::getMemo).forEach(comboBox::addItem);
    comboBox.setSelectedItem(this.getMemo());
    return comboBox;
  }
}